﻿using System;

namespace BasePersistenceNamespace
{
    /// <summary>
    /// 作業スペースファクトリを表します。
    /// </summary>
    /// <remarks>
    /// <para>
    /// 作業スペースファクトリは作業スペースを生成します。
    /// </para>
    /// <para>
    /// 作業スペースファクトリは基本機能としては提供できないためパーシステンスレイヤの主要機能側アセンブリで実装する必要がありますが、
    /// 作業スペースファクトリを実装するための基本クラスは基本機能として提供されます。
    /// 作業スペースファクトリの基本クラスは次の通りです。
    /// <list type="table">
    ///     <listheader>
    ///         <term>クラス</term>
    ///         <description>説明</description>
    ///     </listheader>
    ///     <item>
    ///         <term><see cref="NHibernate.NWorkspaceFactoryBase"/></term>
    ///         <description>NHibernate を使用する作業スペースのファクトリの基本クラスです。</description>
    ///     </item>
    ///     <item>
    ///         <term><see cref="Fake.FWorkspaceFactoryBase"/></term>
    ///         <description>メモリ上のコレクションを使用する作業スペースのファクトリの基本クラスです。</description>
    ///     </item>
    /// </list>
    /// </para>
    /// </remarks>
    /// <seealso cref="IWorkspace"/>
    public interface IWorkspaceFactory
    {
        /// <summary>
        /// 作業スペースを生成します。
        /// </summary>
        /// <returns>作業スペース。</returns>
        IWorkspace Create();
    }
}
